/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package blink.model;

import java.util.*;

/**
 * Modélise une expérience (une serie d'essais sur plusieurs taches) pour un individu.
 * 
 * Une instance de cette classe contient les informations sur l'individu qui passe l'espérience,
 * la liste des tâche que cette éprience contient ainsi que le nombre d'essais qui seront générés pour chaque tache.
 * 
 * Cette classe permet de générer une liste d'essai générés à partir des taches contenues et nombre d'essais associés.
 * @author Jerome David
 */
public class Experiment {
    
    private String subjectName="";  //info sur le sujet qui passe lexperience
    private String subjectLastname="";
    private int age=0;
    
    private List<Task> tasks; // synchroniser avec nbTrysForATask
    
    private List<Integer> nbTrysForATask; // synchroniser avec tasks
    
    private List<Trial> trials;
    
    private String comment="";
    
    
    public Experiment() {
        tasks=new ArrayList<Task>();
        nbTrysForATask=new ArrayList<Integer>();
        //trial=new ArrayList<Trial>();
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getComment() {
        return comment;
    }

    public void setComment(String comment) {
        this.comment = comment;
    }

    public String getSubjectName() {
        return subjectName;
    }

    public void setSubjectName(String subjectName) {
        this.subjectName = subjectName;
    }

    public String getSubjectLastname() {
        return subjectLastname;
    }

    public void setSubjectLastname(String subjectLastname) {
        this.subjectLastname = subjectLastname;
    }

    public List<Task> getTasks() {
        return Collections.unmodifiableList(tasks);
    }
    
    public int getNbTrys(int taskIndex) {
        if (nbTrysForATask==null) {
            System.out.println("mince : "+taskIndex);
            return 0;
        }
        if (nbTrysForATask.get(taskIndex)==null) {
             System.out.println("mince2 : "+taskIndex);
            return 0;
        }
        return nbTrysForATask.get(taskIndex);
    }

    public void setNbTrys(int rowIndex, Integer nb) {
        nbTrysForATask.set(rowIndex, nb);
    }
    
    
    public Task getTask(int idx) {
        return tasks.get(idx);
    } 
    
    public void setTask(int idx, Task t) {
        tasks.set(idx, t);
    }
    
    public void addTask(Task t, int nbTry) {
        tasks.add(t);
        nbTrysForATask.add(nbTry);
    }

    public void removeTask(int idx) {
        tasks.remove(idx);
        nbTrysForATask.remove(idx);
    }
    
    
    
    //renvoir la liste des essais
    public List<Trial> getTrials(){
        if (trials==null) {
            trials = new LinkedList<Trial>();
            Iterator<Task> taskIt=tasks.iterator();
            Iterator<Integer> nbIt=nbTrysForATask.iterator();
            while (taskIt.hasNext()) {
                
                Task currenTask=taskIt.next();
                int nbTrials = nbIt.next();
                
                for (int i=0;i<nbTrials;i++) {
                    trials.add(new Trial(currenTask)); 
                }
                
            }
        }
        
        return Collections.unmodifiableList(trials);
    }

    
}
